/*
 * LDIR
 * 
 * LDIR, a GPS cartography application built for Let's Do It Romania eco 
 * campaign.
 * Copyright (C) 2010 Genera Software <office@generasoftware.com>
 * 
 * http://generasoftware.com/
 * 
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation; either version 2 of the License, or (at your option) any later
 * version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
 * Place, Suite 330, Boston, MA 02111-1307 USA
 */
// SYSTEM INCLUDES
#include <fbs.h>

// USER INCLUDES
#include "StaticImageControl.h"


//////////////////////////////////////////////////////////////////////////
CStaticImageControl* CStaticImageControl::NewL(const TRect& aRect)
{
    CStaticImageControl* self = CStaticImageControl::NewLC(aRect);
    CleanupStack::Pop(self);
    return self;
}

//////////////////////////////////////////////////////////////////////////
CStaticImageControl* CStaticImageControl::NewLC(const TRect& aRect)
{
    CStaticImageControl* self = new (ELeave) CStaticImageControl();
    CleanupStack::PushL(self);
    self->ConstructL(aRect);
    return self;
}

//////////////////////////////////////////////////////////////////////////
CStaticImageControl::CStaticImageControl()
{
    // No implementation required
}

//////////////////////////////////////////////////////////////////////////
CStaticImageControl::~CStaticImageControl()
{
    // No implementation required
}

//////////////////////////////////////////////////////////////////////////
void CStaticImageControl::ConstructL(const TRect& aRect)
{
    SetRect(aRect);
    ActivateL();
}

//////////////////////////////////////////////////////////////////////////
void CStaticImageControl::SetImage(CFbsBitmap* aBitmap)
{
    iBitmap = aBitmap;
}

//////////////////////////////////////////////////////////////////////////
CFbsBitmap* CStaticImageControl::Image() const
{
    return iBitmap;
}

//////////////////////////////////////////////////////////////////////////
void CStaticImageControl::Draw(const TRect& /*aRect*/) const
{
    CWindowGc& gc = SystemGc();
    if (iBitmap)
    {
        TRect controlRect = Rect();
        TSize bitmapSize = iBitmap->SizeInPixels();
        bitmapSize.iWidth = Min(controlRect.Width(), bitmapSize.iWidth);
        bitmapSize.iHeight = Min(controlRect.Height(), bitmapSize.iHeight);
        //gc.BitBlt(controlRect.iTl, iBitmap, TRect(TPoint(0, 0), bitmapSize));
        gc.BitBlt(Rect().iTl + TPoint((controlRect.Width() - bitmapSize.iWidth) / 2, 
            (controlRect.Height() - bitmapSize.iHeight) / 2), iBitmap, TRect(TPoint(0, 0), bitmapSize));
    }
}
